/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.socialfun.controladores;

import com.ec.socialfun.datamanager.InformacionSucursalesDataManager;
import com.ec.socialfun.datamodel.InformacionSucursalesDataModel;
import com.ec.socialfun.entidades.Ciudad;
import com.ec.socialfun.entidades.Pais;
import com.ec.socialfun.entidades.Sucursal;
import com.ec.socialfun.entidades.TipoLocal;
import com.ec.socialfun.entidades.Zona;
import com.ec.socialfun.servicios.TipoLocalFacade;
import com.ec.socialfun.util.JsonUtil;
import com.ec.socialfun.util.SelectOption;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;
import org.jboss.logging.Logger;
import org.primefaces.event.data.FilterEvent;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author hp
 */
@ManagedBean
@RequestScoped
public class InformacionSucursalesControlador extends PadreControlador {

    private static final Logger LOG = Logger.getLogger(InformacionSucursalesControlador.class.getName());
    private LazyDataModel<Sucursal> informacionSucursalesDataModel;
    @ManagedProperty(value = "#{informacionSucursalesDataManager}")
    private InformacionSucursalesDataManager informacionSucursalesDataManager;
    @EJB
    private TipoLocalFacade tipoLocalFacade;
    private static String FILTRO_CIUDAD = "zoCodigo.ciCodigo.ciCodigo";

    /**
     * Creates a new instance of InformacionLocalesControlador
     */
    public InformacionSucursalesControlador() {
    }

    @Override
    public void iniciarDatos() {
        LOG.info(" INICIAR DATOS");
    }

    private void crearCadenaJson(String valor) {
        List<Zona> zonas = zonaFacade.recuperaPorCiudad(new Ciudad(Integer.parseInt(valor)));
        List<SelectOption> listaSelectOpt = new ArrayList<SelectOption>();
        listaSelectOpt.add(new SelectOption(-1, "Todos"));
        for (Zona zona : zonas) {
            listaSelectOpt.add(new SelectOption(zona.getZoCodigo(), zona.getZoNombre()));

        }
        getInformacionSucursalesDataManager().setJson(JsonUtil.listaAJson(listaSelectOpt));
    }

    public void listenFilter(FilterEvent event) {
        LOG.info("listenFilter ");

        Iterator<String> filtros = event.getFilters().keySet().iterator();
        while (filtros.hasNext()) {
            String key = filtros.next();
            String valor = event.getFilters().get(key);
            if (key.equals(FILTRO_CIUDAD)) {
                if (getInformacionSucursalesDataManager().getValorCiudadAnterior() == null) {
                    getInformacionSucursalesDataManager().setValorCiudadAnterior(valor);
                    getInformacionSucursalesDataManager().setActualizaFiltro(true);
                    crearCadenaJson(valor);
                } else {
                    if (getInformacionSucursalesDataManager().getValorCiudadAnterior().equals(valor)) {
                        getInformacionSucursalesDataManager().setActualizaFiltro(false);
                    } else {
                        getInformacionSucursalesDataManager().setValorCiudadAnterior(valor);
                        getInformacionSucursalesDataManager().setActualizaFiltro(true);
                        crearCadenaJson(valor);
                    }
                }
                break;
            }
        }
    }

    public LazyDataModel<Sucursal> getInformacionSucursalesDataModel() {
        if (informacionSucursalesDataModel == null) {
            informacionSucursalesDataModel = new InformacionSucursalesDataModel();
        }
        return informacionSucursalesDataModel;
    }

    public List<SelectItem> getSelectItemCiudad() {
        List<SelectItem> lista = getSelectItemPorDefectoConValor(-1);
        List<Ciudad> listaCiudad = ciudadFacade.recuperaPorPais(getInformacionSucursalesDataManager().getPaisSeleccionado());
        for (Ciudad ciudadTmp : listaCiudad) {
            lista.add(new SelectItem(ciudadTmp.getCiCodigo(), ciudadTmp.getCiNombre()));
        }
        return lista;
    }

    public List<SelectItem> getSelectItemTipoLocal() {
        List<SelectItem> lista = getSelectItemPorDefectoConValor(-1);
        List<TipoLocal> listaTipoLocal = tipoLocalFacade.findAll();
        for (TipoLocal tipoLocalTmp : listaTipoLocal) {
            lista.add(new SelectItem(tipoLocalTmp.getTiLoCodigo(), tipoLocalTmp.getTiLoNombre()));
        }
        LOG.info("getSelectItemCiudad");
        return lista;
    }

    public List<SelectItem> getSelectItemZona() {
        return getSelectItemPorDefectoConValor(-1);

    }

    public void setInformacionSucursalesDataModel(LazyDataModel<Sucursal> informacionSucursalesDataModel) {
        this.informacionSucursalesDataModel = informacionSucursalesDataModel;
    }

    public InformacionSucursalesDataManager getInformacionSucursalesDataManager() {
        return informacionSucursalesDataManager;
    }

    public void setInformacionSucursalesDataManager(InformacionSucursalesDataManager informacionSucursalesDataManager) {
        this.informacionSucursalesDataManager = informacionSucursalesDataManager;
    }

    public List<Pais> getPaises() {
        return paisFacade.findAll();
    }

    public int getTotalPaises() {
        return paisFacade.findAll().size();
    }
}
